package ar.pegasus.clasificador.gui;

import java.util.List;

import ar.pegasus.clasificador.boss.BossAplicacionClasificador;
import ar.pegasus.clasificador.util.AppEtiquetasBotones;
import ar.pegasus.framework.auditoria.BossError;
import ar.pegasus.framework.boss.BossUsuarioVerificado;
import ar.pegasus.framework.componentes.PException;
import ar.pegasus.framework.engine.business.BossModuloRemote;
import ar.pegasus.framework.engine.business.BossRolRemote;
import ar.pegasus.framework.engine.business.BossUsuario;
import ar.pegasus.framework.engine.business.BossUsuarioRemote;
import ar.pegasus.framework.entidades.core.Modulo;
import ar.pegasus.framework.entidades.core.Rol;
import ar.pegasus.framework.entidades.core.Usuario;
import ar.pegasus.framework.templates.login.PLoginManager;
import ar.pegasus.framework.util.BeanFactoryGeneralRemote;

public class ClasificadorLoginManager extends PLoginManager {

	public ClasificadorLoginManager(int idAplicacion) {
		super(idAplicacion);
	}

	public boolean login(String usuario, String password) throws PException {

		int idUsuario = -1;
		try {
			BossUsuarioRemote bossUsuario = BeanFactoryGeneralRemote.getInstance().getBean(BossUsuarioRemote.class);
			idUsuario = bossUsuario.verificarUsuario(usuario, password);
		} catch(Exception e) {
			BossError.gestionarError(new PException(AppEtiquetasBotones.ERROR_CONFIGURACION_APP, e));
			System.exit(-1);
		}
//		if(idUsuario == BossUsuario.ERR_CONEXION) {
//			throw new PException(BossError.ERR_CONEXION, "Error de conexi�n con el Web Service de Login");
//		}
		if(idUsuario == BossUsuario.USUARIO_INVALIDO || idUsuario == BossUsuario.PASSWORD_INVALIDA) {
			return false;
		}
		Rol rol = null;
		try {
			BossRolRemote bossRol = BeanFactoryGeneralRemote.getInstance().getBean(BossRolRemote.class);
			rol = bossRol.getRolPorUsuarioAplicacion(idUsuario, idAplicacion);
		} catch(Exception e) {
			BossError.gestionarError(new PException(AppEtiquetasBotones.ERROR_CARGA_ROLES, e));
			System.exit(-1);
		}
		if(rol == null) {
			return false;
		}
		Usuario usr = new Usuario(idUsuario, usuario);
		usr.setRol(rol);
		usr.setPassword(password); // Necesario para JAAS
		BossUsuarioVerificado.setUsuarioVerificado(usr);
		BossUsuarioVerificado.loginJAASClienteJBoss();
		try {
			BossModuloRemote bossModulo = BeanFactoryGeneralRemote.getInstance().getBean(BossModuloRemote.class);
			modulosUsuario = bossModulo.getModulosPorUsuarioAplicacion(idUsuario, idAplicacion);
		} catch(Exception e) {
			BossError.gestionarError(new PException(AppEtiquetasBotones.ERROR_CARGA_MODULOS, e));
			System.exit(-1);
		}
		modulosAplicacion = BossAplicacionClasificador.getInstance().getAplicacion().getModulosOrdenados();

		return true;
	}

	public List<Modulo> getModulosUsuario() {
		return modulosUsuario;
	}

	public List<Modulo> getModulosAplicacion() {
		return modulosAplicacion;
	}
}
